home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
More Source
/
C⁄C++
/
Swar
/
sound.c
< prev
next >
Wrap
Text File
|
1992-09-30
|
3KB
|
130 lines
#include <Sound.h>
void AInitSnd (void);
OSErr ASndPlay (Handle);
void AStopSnd (void);
Boolean SndIsPlaying (void);
static SndChannelPtr gSndChannel0, gSndChannel1, gSndChannel2;
static Boolean gSndPlaying0, gSndPlaying1, gSndPlaying2;
static SndCommand myCommand;
/*=========================================================*/
#define TRUE 1
#define FALSE 0
#define NIL 0
void
AInitSnd (void)
{
extern Boolean gSndIsInitted;
OSErr myErr = 0;
if (!gSndIsInitted) {
gSndChannel0 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
if (gSndChannel0 != nil) {
gSndChannel0->qLength = stdQLength;
myErr = SndNewChannel(&gSndChannel0, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
} /* if */
gSndPlaying0 = FALSE;
gSndChannel1 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
if (gSndChannel1 != nil) {
gSndChannel1->qLength = stdQLength;
myErr = SndNewChannel(&gSndChannel1, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
} /* if */
gSndPlaying1 = FALSE;
gSndChannel2 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
if (gSndChannel2 != nil) {
gSndChannel2->qLength = stdQLength;
myErr = SndNewChannel(&gSndChannel2, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
} /* if */
gSndPlaying2 = FALSE;
gSndIsInitted = TRUE;
} /* if */
} /* AInitSnd() */
OSErr
ASndPlay (Handle My_snd_Handle)
{
OSErr err = noErr;
extern Boolean gSoundOn;
static short chan;
if (!gSoundOn)
return;
if ((++chan > 2) || (chan < 0))
chan = 0;
switch(chan) {
case 0:
gSndPlaying0 = FALSE;
myCommand.cmd = quietCmd;
err = SndDoImmediate (gSndChannel0, &myCommand);
if (err == noErr)
{
err = SndPlay (gSndChannel0, My_snd_Handle, TRUE);
if (err == noErr)
{
gSndPlaying0 = TRUE;
}
}
break;
case 1:
gSndPlaying1 = FALSE;
myCommand.cmd = quietCmd;
err = SndDoImmediate (gSndChannel1, &myCommand);
if (err == noErr)
{
err = SndPlay (gSndChannel1, My_snd_Handle, TRUE);
if (err == noErr)
{
gSndPlaying1 = TRUE;
}
}
break;
case 2:
gSndPlaying2 = FALSE;
myCommand.cmd = quietCmd;
err = SndDoImmediate (gSndChannel2, &myCommand);
if (err == noErr)
{
err = SndPlay (gSndChannel2, My_snd_Handle, TRUE);
if (err == noErr)
{
gSndPlaying2 = TRUE;
}
}
break;
} /* switch */
return (err);
}
void
AStopSnd (void)
{
extern Boolean gSndIsInitted;
OSErr myErr = 0;
if (gSndIsInitted) {
myErr = SndDisposeChannel (gSndChannel0, TRUE);
gSndPlaying0 = FALSE;
myErr = SndDisposeChannel (gSndChannel1, TRUE);
gSndPlaying1 = FALSE;
myErr = SndDisposeChannel (gSndChannel2, TRUE);
gSndPlaying2 = FALSE;
gSndIsInitted = FALSE;
} /* if */
} /* AStopSnd() */